import axios from 'axios';
import { ElMessage } from 'element-plus';
import { TOKEN_KEY } from '../config/prefix';
import { useUserStore } from '@/store/user';

const userStore = useUserStore();

// 创建axios实例
const service = axios.create({
  // baseURL: '/depth', // API的基础URL,后续引入cross-env 根据这个来做请求处理
  baseURL: '/api',
  timeout: 15000, // 请求超时时间
});

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 从localStorage获取token
    const token = sessionStorage.getItem(`${TOKEN_KEY}`);
    if (token) {
      config.headers['Authorization'] = 'Bearer ' + token;
    }
    return config;
  },
  (error) => {
    console.error('请求错误:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    const res = response.data;
    // 如果状态码不是200，认为请求异常
    if (Number(res.code) !== 200) {
      ElMessage({
        message: res.message || '请求失败',
        type: 'error',
        duration: 5 * 1000,
      });

      // 401表示token过期或未登录
      if (res.code === 401) {
        ElMessage({
          message: '未登录，请登录！',
          type: 'error',
          duration: 5 * 1000,
        });
        userStore.logout();
        // 可以在这里处理登出逻辑
      }
      return Promise.reject(new Error(res.message || '请求失败'));
    } else {
      return res;
    }
  },
  (error) => {
    console.error('响应错误:', error);
    ElMessage({
      message: error.message || '请求失败',
      type: 'error',
      duration: 5 * 1000,
    });
    return Promise.reject(error);
  }
);

export default service;
